/**
 * s由AGCT组成，寻找 长度为10 且 出现次数大于1次 的子串
 * @param {string} s 
 * 用map统计次数
 */
var findRepeatedDNASequences1 = function (s) {
    const map = new Map()
    const result = []
    let i = 0
    // 防止越界
    while (i + 10 <= s.length) {
        const dna = s.substring(i, i + 10)

        // map.has()返回true/false
        // map.get()返回对应的value/undefined

        if (map.get(dna) === undefined) {
            // 这个子串没出现过就加入
            map.set(dna, 1)
        } else if (map.get(dna) === 1) {
            // 此时表明这个子串出现过两次，加入结果数组
            map.set(dna, 2)
            result.push(dna)
        } else {
            map.set(dna, map.get(dna) + 1)
        }
        i++
    }

    return result
}

// set的做法
var findRepeatedDNASequences2 = function (s) {
    const set = new Set(), result = new Set()
    let i = 0
    // 防止越界
    while (i + 10 <= s.length) {
        const dna = s.substring(i, i + 10)

        if (set.has(dna)) {
            // set里由当前子串说明出现超过1次，加入结果集合
            result.push(dna)
        } else {
            set.add(dna)
        }
        i++
    }

    return Array.from(result)
}